#ifndef CAMERA_H
#define CAMERA_H

#include <stddef.h> // for size_t

#define BUFFER_COUNT 4

struct camera
{
    void *start;
    size_t length;
};

struct buffer_info
{
    int index;
    char *pic_buf;
    int length;
};

extern struct camera buffer[BUFFER_COUNT];
extern struct v4l2_buffer buf;
extern struct buffer_info buf_info;

/**
 * @brief 初始化摄像头
 *
 * @param pathname 摄像头设备的路径。
 * @return 成功时返回文件描述符，失败时返回 -1。
 */
int camera_init(const char *pathname);

/**
 * @brief 启动摄像头采集
 *
 * @param fd 摄像头设备的文件描述符。
 * @return 成功时返回 0，失败时返回 -1。
 */
int camera_start(int fd);

/**
 * @brief 获取一帧数据
 *
 * @param fd 摄像头设备的文件描述符。
 * @param pic_buf 指向图像数据的指针。
 * @param length 图像数据的长度。
 * @return 成功时返回 0，失败时返回 -1。
 */
int camera_get(int fd, char **pic_buf, int *length);

/**
 * @brief 将已处理的缓冲区重新放入缓存队列
 *
 * @param fd 摄像头设备的文件描述符。
 * @return 成功时返回 0，失败时返回 -1。
 */
int camera_input(int fd);

/**
 * @brief 停止摄像头流
 *
 * @param fd 摄像头设备的文件描述符。
 */
void camera_stop(int fd);

#endif // CAMERA_H
